const fs = require('fs');
const path = require('path');
const { PATH_CONFIG } = require('../config/constants');

// 创建目录的异步函数
async function createDirectory(dir) {
    try {
        await fs.promises.mkdir(dir, { recursive: true });
        console.log(`✅ 目录创建成功: ${dir}`);
    } catch (error) {
        if (error.code !== 'EEXIST') {
            console.error(`❌ 创建目录失败: ${dir}`, error);
            throw error;
        }
        console.log(`ℹ️ 目录已存在: ${dir}`);
    }
}

// 生成安全的文件名
function generateSafeFileName(originalName) {
    const timestamp = Date.now();
    const random = Math.random().toString(36).substring(7);
    // 确保文件有正确的扩展名
    let ext = path.extname(originalName);
    if (!ext) {
        // 如果没有扩展名，默认使用.jpg
        ext = '.jpg';
    }
    return `${timestamp}_${random}${ext}`;
}

// 清理文件函数
function cleanupFiles(files, shouldLog = true) {
    files.forEach(file => {
        try {
            if (fs.existsSync(file)) {
                if (shouldLog) {
                    console.log(`准备清理文件: ${file}`);
                }
                fs.unlinkSync(file);
                if (shouldLog) {
                    console.log(`成功清理文件: ${file}`);
                }
            } else {
                if (shouldLog) {
                    console.log(`文件不存在，无需清理: ${file}`);
                }
            }
        } catch (err) {
            console.error(`清理文件失败: ${file}`, err);
        }
    });
}

// 确保目录存在
function ensureDirectoryExists(dir) {
    if (!fs.existsSync(dir)) {
        fs.mkdirSync(dir, { recursive: true });
        console.log(`创建目录: ${dir}`);
    }
}

// 验证文件是否存在
function verifyFileExists(filePath, description = '文件') {
    if (!fs.existsSync(filePath)) {
        throw new Error(`${description}不存在: ${filePath}`);
    }
    console.log(`${description}存在: ${filePath}`);
    return true;
}

// 获取文件大小
function getFileSize(filePath) {
    try {
        const stats = fs.statSync(filePath);
        const fileSizeInBytes = stats.size;
        const fileSizeInMB = (fileSizeInBytes / (1024 * 1024)).toFixed(2);
        return `${fileSizeInMB} MB`;
    } catch (err) {
        console.error('获取文件大小失败:', err);
        return '未知';
    }
}

// 初始化所有必要的目录
async function initializeDirectories() {
    try {
        await Promise.all([
            createDirectory(PATH_CONFIG.uploadDir),
            createDirectory(PATH_CONFIG.outputDir),
            createDirectory(PATH_CONFIG.logsDir)
        ]);
        console.log('✨ 所有目录初始化完成');
    } catch (error) {
        console.error('❌ 目录初始化失败:', error);
        process.exit(1);
    }
}

module.exports = {
    createDirectory,
    generateSafeFileName,
    cleanupFiles,
    ensureDirectoryExists,
    verifyFileExists,
    getFileSize,
    initializeDirectories
}; 